package com.itcam.phaselist.map_;

import java.util.*;

public class MapFor {
    public static void main(String[] args) {
        Map map = new HashMap();

        map.put("李星云", "姬如雪");
        map.put("张子凡", "陆林轩");
        map.put("李茂贞", "妙成天");
        map.put("女帝", "妙成天");
        map.put("本人", null);
        map.put(null, "萤勾");
        map.put("黑无常", "白无常");

        // 第一组: 先取出所有的Key, 通过Key取出对应的Value
        System.out.println("-----第一种方式-------");
        Set keyset = map.keySet();
        for (Object key : keyset) {
            System.out.println(key + "——" + map.get(key));
        }

        System.out.println("-----第二种方式-------");
        Iterator iterator = keyset.iterator();
        while (iterator.hasNext()) {
            Object key = iterator.next();
            System.out.println(key + "——" + map.get(key));
        }

        // 第二组: 把所有的values取出
        Collection values = map.values();
        // 这里可以使用所有的Collections使用的遍历方法
        //(1) 增强for
        System.out.println("---取出所有的value增强for----");
        for (Object value : values) {
            System.out.println(value);
        }

        //(2) 迭代器
        System.out.println("---取出所有的value迭代器----");
        Iterator it = values.iterator();
        while (it.hasNext()) {
            Object value = it.next();
            System.out.println(value);
        }

        // 第三组: 通过EntrySet来获取k-v
        Set set = map.entrySet();// EntrySet<Map.Entry<K,V>>
        //(1)增强for
        System.out.println("----使用EntrySet 的for 增强(第3 种)----");
        for (Object entry : set) {
            //将entry转成Map.Entry
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey() + "-" + m.getValue());
        }

        //(2)迭代器
        System.out.println("----使用EntrySet的迭代器(第4种)----");
        Iterator itt = set.iterator();
        while (itt.hasNext()) {
            Object entry = itt.next();
            //System.out.println(entry.getClass());//HashMap$Node -实现-> Map.Entry (getKey,getValue)
            //向下转型Map.Entry
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey() + "-" + m.getValue());
        }
    }
}
